<!doctype html>
<html>
  <head>
    <title>Notifications: Creating a notification in a detached context should
      throw a TypeError.</title>
    <script src="../resources/testharness.js"></script>
    <script src="../resources/testharnessreport.js"></script>
    <script src="resources/test-helpers.js"></script>
  </head>
  <body>
    <script>
      if (window.testRunner) {
          testRunner.setPermission('notifications', 'granted', location.origin, location.origin);
          testRunner.setPopupBlockingEnabled(false);
      }

      async_test(test => {
          const remoteWindow = window.open('resources/window-detached-context.html');
          let remoteNotificationObj = null;

          window.addEventListener('message', test.step_func(event => {
              switch (event.data) {
                  case 'opened':
                      assert_own_property(remoteWindow, 'Notification');
                      remoteNotificationObj = remoteWindow.Notification;
                      remoteWindow.close();
                      break;

                  case 'closed':
                      try {
                          new remoteNotificationObj('Title');
                          assert_unreached('Expected a TypeError but no error thrown.');
                      } catch (e) {
                          assert_equals(e.name, 'TypeError');
                          assert_equals(
                              e.message, "Failed to construct 'Notification': Illegal invocation.");
                      }
                      test.done();
                      break;
                  default:
                      assert_unreached('Unrecognized message from the opened window.');
                      break;
              }
          }));

      }, 'Creating a notification in a detached context should throw.');
    </script>
  </body>
</html>
